<?php
include('simple_html_dom.php');

function ping($host, $port, $timeout) 
{ 
  $tB = microtime(true); 
  $fP = fSockOpen($host, $port, $errno, $errstr, $timeout); 
  if (!$fP) { return "down"; } 
  $tA = microtime(true); 
  return round((($tA - $tB) * 1000), 0)." ms"; 
}

function pulisci($col){
	$col = ereg_replace('<br>' , ';' ,$col);
	$col = ereg_replace('<span(.+)?>' , '' ,$col);
	$col = ereg_replace('<img alt=\"' , '' ,$col);
	$col = ereg_replace('\" src=\"' , ';' ,$col);
	$col = ereg_replace('\" style=\"vertical-align:middle;\">' , '' ,$col);
	$col = ereg_replace('<input(.+)?>' , '' ,$col);
	$col = ereg_replace('<strong(.+)?>' , '' ,$col);
	$col = ereg_replace('<\/td>' , ';' ,$col);
	$col = ereg_replace('<td(.+)?>' , '' ,$col );
	return $col;
}

function cambi($html,$intestazione) {
	$json = array ();
	$json_com = array ();
	$json_cambi = array ();
	$flagCambi = False;         
	foreach ($html->find('tr') as $row) {
		$i=0;
		if ($j>1) {
			if (count($row->find('td'))<7)
				$cambio=True;
			else {
				if ($flagCambi) {
					$json_com['numeroCambi'] = count($json_cambi);
					$json_com['cambi'] = $json_cambi;
					array_push($json, $json_com);
					$json_com = array();
					$json_cambi = array();
				}
				$cambio=False;
			}
			$countCol=0;
				
			$flagCambi = true;
			foreach($row->find('td') as $col) {
				$col = pulisci($col);
				if (!$cambio) {
						
					if (strstr($intestazione[$i], "partenza")) {
						$value = preg_split('/;/',$col, -1, PREG_SPLIT_OFFSET_CAPTURE);
						$json_com['oraIn'] = $value[0][0];
						$json_com['stazIn'] = $value[1][0];
					} else
						if (strstr($intestazione[$i], "arrivo")) {
						$value = preg_split('/;/',$col, -1, PREG_SPLIT_OFFSET_CAPTURE);
						$json_com['oraOut'] = $value[0][0];
						$json_com['stazOut'] = $value[1][0];
					} else
						if (strstr($intestazione[$i], "tipo")) {
						$value = preg_split('/;/',$col, -1, PREG_SPLIT_OFFSET_CAPTURE);
						$json_com['tipo'] = $value[0][0];
						$json_com['link'] = $value[1][0];
					} else
						if (strstr($intestazione[$i], "numero")) {
						$value = preg_split('/ /',$col, -1, PREG_SPLIT_OFFSET_CAPTURE);
						$json_com['numero'] =  $value[0][0];
					} else
						if (!strstr($intestazione[$i], "seleziona") && !strstr($intestazione[$i], "cambio")) {
						$col =  ereg_replace(' ;' , '' ,$col ); $col =  ereg_replace(';' , '' ,$col );
						$json_com[$intestazione[$i]] = $col;
					}
				}
				else {
					$countCol++;
					if (strstr($intestazione[$i], "partenza")) {
						$value = preg_split('/;/',$col, -1, PREG_SPLIT_OFFSET_CAPTURE);
						$json_cambi_com['oraIn'] = $value[0][0];
						$json_cambi_com['stazIn'] = $value[1][0];
					} else
						if (strstr($intestazione[$i], "arrivo")) {
						$value = preg_split('/ /',$col, -1, PREG_SPLIT_OFFSET_CAPTURE);
						$json_cambi_com['numero'] =  $value[0][0];
					} else
						if (strstr($intestazione[$i], "durata")) {
						$value = preg_split('/;/',$col, -1, PREG_SPLIT_OFFSET_CAPTURE);
						$json_cambi_com['tipo'] = $value[0][0];
						$json_cambi_com['link'] = $value[1][0];
					}
					if ($countCol==3) {
						array_push($json_cambi, $json_cambi_com);
					}
				}
				$i++;
			}
		}
		$j++;
	}
	$json_com['numeroCambi'] = count($json_cambi);
	$json_com['cambi'] = $json_cambi;
	array_push($json, $json_com);

	$array = array (
			"stato"=> 0,
			"orari" => $json);
	return json_encode($array);
}

function noCambi($html,$intestazione) {
	$j=0;
	$json = array ();
	$json_com = array ();       
	foreach ($html->find('tr') as $row) {
		$i=0;
		if ($j>1) {
			foreach($row->find('td') as $col) {
				$col = pulisci($col);
				if (strstr($intestazione[$i], "partenza")) {
					$value = preg_split('/;/',$col, -1, PREG_SPLIT_OFFSET_CAPTURE);
					$json_com['oraIn'] = $value[0][0];
					$json_com['stazIn'] = $value[1][0];
				} else
					if (strstr($intestazione[$i], "arrivo")) {
					$value = preg_split('/;/',$col, -1, PREG_SPLIT_OFFSET_CAPTURE);
					$json_com['oraOut'] = $value[0][0];
					$json_com['stazOut'] = $value[1][0];
				} else
					if (strstr($intestazione[$i], "tipo")) {
					$value = preg_split('/;/',$col, -1, PREG_SPLIT_OFFSET_CAPTURE);
					$json_com['tipo'] = $value[0][0];
					$json_com['link'] = $value[1][0];
				} else
					if (strstr($intestazione[$i], "numero")) {
					$value = preg_split('/ /',$col, -1, PREG_SPLIT_OFFSET_CAPTURE);
					$json_com['numero'] =  $value[0][0];
				} else
					if (!strstr($intestazione[$i], "seleziona")) {
					$col =  ereg_replace(' ;' , '' ,$col ); $col =  ereg_replace(';' , '' ,$col );
					$json_com[$intestazione[$i]] = $col;
				} else {
					$json_com['numeroCambi'] = 0;
					$json_com['cambi'] = array ();
				}
				$i++;
			}
			array_push($json, $json_com);
		}
		$j++;
	}
	$array = array (
			"stato"=> 0,
			"orari" => $json);
	return json_encode($array);
}

function parserHtml($stazIn, $stazOut, $gg, $mm, $aa, $hh, $min, $nreq) {
		$html = file_get_html('http://orario.trenitalia.com/b2c/nppPriceTravelSolutions.do?car=0&stazin='.$stazIn.'&stazout='.$stazOut.'&datag='.$gg.'&datam='.$mm.'&dataa='.$aa.'&timsh='.$hh.'&stazin_r=Staz_DA&stazout_r=Staz_A&timsm='.$min.'&timsm_r=58&lang=it&nreq='.$nreq.'&channel=tcom&npag=1&lang_r=it&nreq_r=5&channel_r=tcom&npag_r=1&x=40&y=6');		
                $i = 0 ;
		$intestazione = '';               
         
	$i = 0 ;
	foreach($html->find('th') as $element) {
		$value = strtolower($element->title);
		$value =  ereg_replace('num. treno' , 'numero' ,$value);
		$value =  ereg_replace('prezzo di ' , '' ,$value);
		$value =  ereg_replace('categoria' , 'tipo' ,$value);
		$value =  ereg_replace(' \*\*' , '' ,$value);
		$intestazione[$i] =  strtolower($value);
		$i++;
	}

	$countInt=count($intestazione);
        if ($i==0){
                        $array = array (
					"stato"=> -1,
					"orari" => "Nessuna soluzione trovata");
			return  json_encode($array);	
}
	if ($countInt==9)
		return cambi($html,$intestazione);
	else
		return noCambi($html,$intestazione);


}

ping("orario.trenitalia.com", 80, 10);

$stazIn =  ereg_replace(' ' , '+' ,$_GET['stazIn']);
$stazOut = ereg_replace(' ' , '+' ,$_GET['stazOut']);
$gg = $_GET['gg'];
$mm = $_GET['mm'];
$aa = $_GET['aa'];
$hh = $_GET['hh'];
$min = $_GET['min'];
$nreq = $_GET['nreq'];

$res = parserHtml($stazIn, $stazOut, $gg, $mm, $aa, $hh, $min, $nreq);

echo $res;
?>